// Cfg.h: interface for the CCfg class.
//

// 功能描述：配置功能，一般根据读取配置决定是否显示某配置项；
// Function Description: configuration function. Generally, whether to display a configuration item depends on the read configuration;



#if !defined(CONFIG)
#define CONFIG

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000


class CConfig
{
	typedef enum
	{
		MAX_VALUE_LEN = 300,		//< 每个键值最大长度  | maximum length per key
	}ENUM_LIMIT;

public:
	//! 构造、析构函数
	// construct、destructor function
	CConfig();
	CConfig(CString strFile);
	virtual ~CConfig();

	// 设置配置文件路径
	// Set configuration path
	void SetCfgFile(CString strFile);

	// 获取配置文件路径
	// get configuration file path

	CString GetCfgFile();

	// 获取键值						| get key value
	// 参数列表：	appName	app名称 | parameters list : application name
	// keySource	子键名称        | subkey name
	// defaultValue	默认值			| defult value
	// 返回值：	CString 获取到的值  | return : cstring get value
    CString GetKeyValue(
		const CString& appName,
		const CString& keySource, const CString& defaultValue = _T(""));


	// 获取键值，针对BOOL类型		| get keyValue for bool type
	// 参数列表：	appName	app名称 | parameters list : application name
	// keySource	子键名称        | subkey name
	// defaultValue	默认值			| defult value
	// 返回值：	BOOL 获取到的值		| return : bool get value
	BOOL IsEnable(
		const CString& appName, 
		const CString& keySource, BOOL bDefault = FALSE);


	// 获取键值，针对int类型		| get keyValue for int type
	// 参数列表：	appName	app名称 | parameters list : application name
	// keySource	子键名称        | subkey name
	// defaultValue	默认值			| defult value
	// 返回值：	int 获取到的值		| return : intergrate get value

	int GetKeyInt(
		const CString& appName,
		const CString& keySource, int nDefault = 0);
	
	// 获取键值，针对double类型		| get keyValue for double type
	// 参数列表：	appName	app名称 | parameters list : application name
	// keySource	子键名称        | subkey name
	// defaultValue	默认值			| defult value
	// 返回值：	double 获取到的值		| return : double get value
	double GetKeyDouble(
		const CString& appName,
		const CString& keySource, double fDefault = 0.0);

	// 保存键值									| save keyValue
	// 参数列表：	appName	app名称				| parameters list : application name
	// keySource	子键名称					| subkey name
	// strValue 	保存键值					| save keyValue
	// return：	BOOL TRUE，成功，FALSE，失败    | return: bool true succeed, false fail

    BOOL SetKeyValue(
		const CString& appName,
		const CString& keySource, const CString& strValue);

	// 保存键值	针对Bool型						| save keyValue for bool type
	// 参数列表：appName app名称				| parameters list : application name
	// keySource 子键名称						| subkey name
	// bValue 	 默认值							| bValue defult value
	// return：	BOOL TRUE，成功，FALSE，失败    | return: BOOL true succeed, false fail
	BOOL SetEnable(
		const CString& appName, 
		const CString& keySource, BOOL bValue);

	// 保存键值	针对int型						| save keyValue for int type
	// 参数列表：appName app名称				| parameters list : application name
	// keySource 子键名称						| subkey name
	// bValue 	 默认值							| bValue defult value
	// return：	BOOL TRUE，成功，FALSE，失败    | return: BOOL true succeed, false fail
	BOOL SetKeyInt(
		const CString& appName,
		const CString& keySource, int nValue);
	
	// 保存键值	针对double型					| save keyValue for double type
	// 参数列表：appName app名称				| parameters list : application name
	// keySource 子键名称						| subkey name
	// bValue 	 默认值							| bValue defult value
	// return：	BOOL TRUE，成功，FALSE，失败    | return: BOOL true succeed, false fail
	BOOL SetKeyDouble(
		const CString& appName,
		const CString& keySource, double fValue, int nFrac);

	//	判断文件是否存在 | judge file is exist
	//	返回值：		 | return :
    BOOL FileIsExist();


private:
	//! 配置文件 |configuration file
	CString m_fileName;
};

#endif // !defined(CONFIG)

